#ifndef TRIE_H
#define TRIE_H

#define ALPHABET_SIZE    27  // 26个字母 + 1个斜杠字符('/')
#define CHAR_TO_INDEX(c) ( \
(c) == '/' ? 26 : (int) (c) - 'a' \
)

// Trie节点结构
typedef struct TrieNode {
    void            *data;                    // 存储与该节点相关的数据
    struct TrieNode *children[ALPHABET_SIZE]; // 子节点指针
    int              isEndOfWord;             // 标记是否为单词的结尾
    int              isWildcard;              // 标记该节点是否是通配符节点 (/**)
} TrieNode;

TrieNode *trie_create_node(void *data);

void  trie_insert(TrieNode *root, const char *key, void *data);
void *trie_search(TrieNode *root, const char *key);
void *trie_starts_with_prefix(TrieNode *root, const char *prefix);


#endif //TRIE_H
